/* Filename: big.c
 * Description: 写入大文件，先lseek到末尾占用空间，预防后面空间不足以写入
 * Last modified: humble 20200301 18:27
 */
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/types.h>
#include <unistd.h>

static void usage(void);

int main(int argc, char **argv) {
    if(argc != 2){ fprintf(stderr, "argc !=2"); usage(); exit(1); }

    int fd = open(argv[1], O_WRONLY|O_CREAT|O_TRUNC, 0600); // 创建并清空文件
    if(fd < 0){ perror("open"); exit(1); }

    // int ret = lseek(fd, 5 * 1024 * 1024 * 1024 - 1, SEEK_SET); //编译告警，第2参数5G的大小溢出了(默认数字是int)
    // int ret = lseek(fd, (5 * 1024 * 1024 * 1024 - 1)LL, SEEK_SET); //也是会溢出的
    int ret = lseek(fd, 5LL * 1024LL * 1024LL * 1024LL - 1LL, SEEK_SET); //加LL就表示64位
    if(ret < 0){ perror("lseek"); exit(1); }

    write(fd, "", 1); //若没有发生write()这个系统调用，那么文件大小依然是0
    close(fd);
    return 0;
}

static void usage(void) {
#define USAGE "Usage:\n\
  Helloworld\n"
    printf(USAGE);
}
